package com.itlong.cloud.app.dao;

import com.itlong.cloud.POJO.PO.TimeTaskDevicePassRecordPO;
import com.itlong.cloud.POJO.VO.app.AppCallElevatorRecordVO;
import com.itlong.cloud.POJO.VO.app.AppElevatorFloorSimpleVO;
import com.itlong.cloud.POJO.VO.app.AppRoomApplyLogVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      APP用户数据操作接口。
 * <desc/>
 *
 * @createDate 2018-03-26.
 */
@Mapper
@Repository
public interface IAppHomeDao {

    /**
     * <desc>
     *      获取申请房间记录列表。
     * <desc/>
     *
     * @param  params
     * @return
     * @author shengen.T
     * @createDate 2018-03-26
     */
    List<AppRoomApplyLogVO> getApplyRoomLogPage(Map<String,Object> params);

    /**
     * <desc>
     *      获取申请房间记录总数列表。
     * <desc/>
     *
     * @param  params
     * @return
     * @author shengen.T
     * @createDate 2018-03-26
     */
    Integer getPageCount(Map<String,Object> params);


    /**
     * <desc>
     *      保存呼梯信息记录。
     * <desc/>
     *
     * @param  params
     * @return
     * @author shengen.T
     * @createDate 2018-04-02
     */
    Integer saveCallElevatorRecord(Map<String,Object> params);


    /**
     * <desc>
     *      获取呼梯记录。
     * <desc/>
     *
     * @param  userId 用户ID
     * @param  deviceUniques 设备唯一ID
     * @return
     * @author shengen.T
     * @createDate 2018-04-03
     */
    List<AppCallElevatorRecordVO> getCallLiftRecord(@Param("userId") String userId,@Param("deviceUniques") String[] deviceUniques);


    /**
     * <desc>
     *      删除呼梯记录。
     * <desc/>
     *
     * @param  userId 用户ID
     * @param  projectId 项目ID
     * @param  deviceUniques 设备唯一ID
     * @return
     * @author shengen.T
     * @createDate 2018-04-04
     */
    Integer deleteCallLiftRecord(@Param("userId") String userId,@Param("projectId") String projectId,@Param("deviceUniques") String[] deviceUniques);


    /**
    * <desc>
    *      获取楼层信息。
    * <desc/>
    *
    * @param  deviceUnique 设备ID
    * @param  fromId 出发楼层号
    * @param  toId 目标楼层号
    * @return
    * @author shengen.T
    * @createDate 2018-04-09
    */
    AppElevatorFloorSimpleVO getFloorInfo(@Param("deviceUnique") String deviceUnique,@Param("fromId") String fromId,@Param("toId") String toId);


     /**
      * <desc>
      *      取消预约呼梯。
      * <desc/>
      *
      * @param  recordId 呼梯ID
      * @return
      * @author shengen.T
      * @createDate 2018-04-12
      */
    Integer cancelCallLift(@Param("recordId") String recordId);

     /**
      * <desc>
      *      获取当前用户预约的呼梯ID。
      * <desc/>
      *
      * @param  userId 用户ID
      * @param  projectId 项目ID
      * @param  deviceUnique 设备唯一ID
      * @return
      * @author shengen.T
      * @createDate 2018-04-13
      */
    String getRecordIdForUser(@Param("userId") String userId,
                              @Param("projectId") String projectId,
                              @Param("deviceUnique") String deviceUnique,
                              @Param("groupConId") String groupConId);


     /**
      * <desc>
      *      保存呼梯预约行程表。
      * <desc/>
      *
      * @param  params 预约行程参数
      * @return
      * @author shengen.T
      * @createDate 2018-04-13
      */
    Integer saveCallLiftStatusInfo(Map<String,Object> params);

    /**
     * <desc>
     *      根据设备唯一码获取设备名称
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author jiaqi.X
     * @createDate 2018/01/11
     */
    String getDeviceNameByDeviceUnique(@Param("deviceUnique") String deviceUnique,@Param("deviceType") Integer deviceType);

    /**
     * <desc>
     *      获取真实楼层信息。
     * <desc/>
     *
     * @param  deviceUnique 设备ID
     * @param  fromId 出发楼层号
     * @param  toId 目标楼层号
     * @return
     * @author shengen.T
     * @createDate 2018-04-09
     */
    AppElevatorFloorSimpleVO getRealFloorInfo(@Param("deviceUnique") String deviceUnique,@Param("fromId") String fromId,@Param("toId") String toId);

    /**
     * <desc>
     *      获取楼层权限标识
     * <desc/>
     *
     * @param  deviceUnique 设备ID
     * @param  fromId 出发楼层号
     * @param  toId 目标楼层号
     * @return
     * @author Jiaqi.X
     * @createDate 2018/11/29
     */
    Map<String,Object> getNaturalFloor(@Param("deviceUnique") String deviceUnique,@Param("fromId") String fromId,@Param("toId") String toId);

    /**
     * <desc>
     *      设备验证(梯控)。
     * <desc/>
     *
     * @param projectId 项目编号
     * @param deviceId 项目ID
     * @return
     * @author Qiang.S
     * @createDate 2018-05-14
     */
    Integer elevatorAuthorityCheck(@Param("projectId") String projectId,@Param("deviceId") String deviceId);

    /**
     * <desc>
     *      设备验证(门禁)。
     * <desc/>
     *
     * @param projectId 项目编号
     * @param deviceId 项目ID
     * @return
     * @author Qiang.S
     * @createDate 2018-05-14
     */
    Integer entranceAuthorityCheck(@Param("projectId") String projectId,@Param("deviceId") String deviceId);

    /**
     * <desc>
     *      登陆验证。
     * <desc/>
     *
     * @param ID 账号
     * @param password 密码
     * @return
     * @author Qiang.S
     * @createDate 2018-05-14
     */
    Integer engineerLoginVerify(@Param("ID") String ID,@Param("password") String password);

    /**
     * <desc>
     *      批量获取真实楼层信息。
     * <desc/>
     *
     * @param deviceUnique 设备唯一编号
     * @param floorList 楼层端子列表
     * @return
     * @author shengen.T
     * @createDate 2018-05-18
     */
    List<String> batchGetRealFloorList(@Param("deviceUnique") String deviceUnique,@Param("floorList") String[] floorList);

    /**
     * <desc>
     *      检测用户是否在项目下。
     * <desc/>
     *
     * @param userId 用户编号
     * @param projectId 项目编号
     * @return
     * @author shengen.T
     * @createDate 2018-05-29
     */
    Integer checkUserInProject(@Param("userId") String userId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取用户当前项目状态。
     * <desc/>
     *
     * @param userId 用户编号
     * @param projectId 项目编号
     * @return
     * @author shengen.T
     * @createDate 2018-05-29
     */
    Map getUserStatus(@Param("userId") String userId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      根据设备序列号查询控制器id
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/04/28
     */
    Map<String,Object> getControllerByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据人脸获取访客名称。
     * <desc/>
     *
     * @param userId 用户编号
     * @param projectId 项目编号
     * @return
     * @author Qiang.S
     * @createDate 2019-05-16
     */
    String getVisitorName(@Param("userId") String userId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      通过correlationId查询设备通行记录
     * </desc>
     *
     * @param correlationId 从网络呼梯指令中获取到的事件唯一id
     * @return 设备通行记录
     * @author Juguang.S
     * @createDate 2020/05/29
     */
    TimeTaskDevicePassRecordPO getDevicePassRecordByCorrelationId(@Param("correlationId") String correlationId);


    /**
     * <desc>
     *      变更通行记录通行方式
     * </desc>
     *
     * @param correlationId
     * @return
     * @author Juguang.S
     * @createDate 2020/09/22
     */
    Integer updateOpenType(@Param("correlationId") String correlationId);

    /**
     * <desc>
     *      变更电梯通行记录通行方式
     * </desc>
     *
     * @param deviceUnique 设备机号
     * @param passTime 通行时间
     * @return
     * @author Juguang.S
     * @createDate 2020/09/22
     */
    Integer updateElevatorOpenType(@Param("deviceUnique") String deviceUnique,@Param("passTime") String passTime,@Param("userId") String userId);

}
